// pages/cart/index.js
import { showModal,showToast } from '../../utils/showmodel.js'

Page({

  /**
   * 页面的初始数据
   */
  data: {
    address: {},
    cart: [],
    allCheck: false,
    totalPrice: 0,
    totalNum: 0
  },


  handelAddress() {
    //获取用户的收货地址
    //绑定小程序内置 api 获取用户的收货地址 wx.chooseAddress
    //获取小程序授权的 权限状态
    wx.getSetting({
      success: (result) => {
        const scopedAddress = result.authSetting["scope.address"]
        if (scopedAddress === true) {
          wx.chooseAddress({
            success: (result) => {
              const res = result
              //将用户地址缓存起来
              wx.setStorageSync('address', res);
            },
          });
        }
      },
    });


  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },
  //当页面渲染完毕触发
  onShow() {
    //获取缓存的地址
    const address = wx.getStorageSync('address');
    //拿到缓存在strong中的商品数组cart
    const cart = wx.getStorageSync('cart') || [];
    this.setTotalInfo(cart)
    this.setData({
      address
    })
  },
  //商品勾选状态的改变
  checkChange(e) {
    //拿到改变状态的商品id
    const goods_id = e.currentTarget.dataset.id
    //通过id查找到数组中所处位置index
    let { cart } = this.data
    const Index = cart.findIndex(v => goods_id === v.goods_id)
    cart[Index].checked = !cart[Index].checked
    this.setTotalInfo(cart)
  },
  //全选按钮的点击
  AllCheckChange() {
    //拿到商品数组
    let { cart } = this.data
    //将data中的allcheck取反
    let { allCheck } = this.data
    allCheck = !allCheck
    cart.forEach(v => v.checked = allCheck)
    // 重新计算价格和数量
    this.setTotalInfo(cart)
    //将修改完的值赋值回data 和缓存起来
    this.setData({
      cart,
      allCheck
    })
    wx.setStorageSync("cart", cart);
  },


  //设置购物车状态的同时 重新计算 底部工具栏的各个价格属性
  setTotalInfo(cart) {
    //重新赋值 总价格 总数量 和全选
    const allCheck = cart.length ? cart.every(item => item.checked) : false;
    //获取总价格 和总数量
    let totalPrice = 0
    let totalNum = 0
    cart.forEach(item => {
      if (item.checked) {
        totalPrice += item.num * item.goods_price
        totalNum += item.num
      }
    })

    //将cart数组重新放进data和缓存中
    this.setData({
      cart,
      totalPrice,
      totalNum,
      allCheck
    })
    wx.setStorageSync("cart", cart);
  },

  async numEdit(e) {
    //获取 id 和 修改值
    const { id, operation } = e.currentTarget.dataset
    let { cart } = this.data
    //找到对应增加数量的商品
    const index = cart.findIndex(v => v.goods_id === id)
    //判断商品数量是否为<1了 如果是 弹出一个删除商品的弹框
    if (cart[index].num === 1 && operation === -1) {
      const res = await showModal({content: "是否删除该商品"})
      if (res.confirm) {
        //用户点击了确认  删除商品
        cart.splice(index, 1)
        //重新赋值和计算
        this.setTotalInfo(cart)
      }
    }else {
      cart[index].num += operation
      //重新赋值和计算
      this.setTotalInfo(cart)
    }
    //将数据重新赋值和缓存
    this.setTotalInfo(cart)
    this.setData({
      cart
    })
    wx.setStorageSync('cart', cart);
  },
  
  //购物车结算按钮
 async handlePay(){
  //判断是否有填写地址
  const {address,totalNum} = this.data
  if(!address){
    //没写地址  弹出提示框
    await showToast({title:'请填写收货地址',icon:'none'})
    return;  
  }
  //判断用户是否有选中商品
  if(totalNum === 0){
    await showToast({title:'请选择想要购买的商品',icon:'none'})
    return;  
  }
  //函数式跳转 跳转到支付界面
  wx.navigateTo({
    url: '/pages/pay/index',
    success: (result)=>{
      
    },
  });
 }
})